function showMessage(type,msg,redirect){
    if(type == "success"){
      $("#messagebox").attr("class","msgbox message-success");
      if(redirect){
        $("#messagebox").html(msg);
        setTimeout(function(){
          location.href = redirect;
        },1000);
      }
    }
    else{
      $("#messagebox").attr("class","msgbox exception");
      $("#messagebox").html(msg);
      setTimeout(function(){
        $("#messagebox").attr("class","msgbox");
      },2000);
    }
}

function format(txt,compress){/* 格式化JSON源码(对象转换为JSON文本) */  
    var indentChar = '    ';   
    if(/^\s*$/.test(txt)){   
        // alert('数据为空,无法格式化! ');
        return {success:false,msg:'数据为空,无法格式化! '};
    }   
    try{var data=eval('('+txt+')');}   
    catch(e){   
        // alert('数据源语法错误,格式化失败! 错误信息: '+e.description,'err');
        return {success:false,msg:'数据源语法错误,格式化失败! '};
    };   
    var draw=[],last=false,This=this,line=compress?'':'\n',nodeCount=0,maxDepth=0;

    var notify=function(name,value,isLast,indent/*缩进*/,formObj){   
        nodeCount++;/*节点计数*/  
        for (var i=0,tab='';i<indent;i++ )tab+=indentChar;/* 缩进HTML */  
        tab=compress?'':tab;/*压缩模式忽略缩进*/  
        maxDepth=++indent;/*缩进递增并记录*/  
        if(value&&value.constructor==Array){/*处理数组*/  
            draw.push('<dl data-type="Array['+value.length+']"><dt>'+tab+(formObj?('<span class="key">"'+name+'"</span>:'):'')+'<span class="action"><a href="javascript:;" onclick="hide(this)" class="fold glyphicon glyphicon-minus"></a>['+line+'</span></dt>');/*缩进'[' 然后换行*/  
            draw.push('<dd>');
            for (var i=0;i<value.length;i++){
                notify(i,value[i],i==value.length-1,indent,false);   
            }
            draw.push('</dd>');
            draw.push('<span class="right-brace">'+tab+']'+(isLast?line:(','+line))+'</span>');/*缩进']'换行,若非尾元素则添加逗号*/ 
            draw.push('</dl>'); 
        }else if(value&&typeof value=='object'){/*处理对象*/
            draw.push('<dl data-type="Object{...}"><dt>'+tab+(formObj?('<span class="key">"'+name+'"</span>:'):'')+'<span class="action"><a href="javascript:;" onclick="hide(this)" class="fold glyphicon glyphicon-minus"></a>{'+line+'</span></dt>');/*缩进'{' 然后换行*/
            draw.push('<dd>');
            var len=0,i=0;   
            for(var key in value)len++;   
            for(var key in value)notify(key,value[key],++i==len,indent,true);   
            draw.push('</dd>');
            draw.push('<span class="right-brace">'+tab+'}'+(isLast?line:(','+line))+'</span>');/*缩进'}'换行,若非尾元素则添加逗号*/ 
            draw.push('</dl>'); 
        }else{
                if(typeof value=='string')value='<span class="string">"'+value+'"</span>';
                if(typeof value=='number')value='<span class="number">'+value+'</span>';
                if(typeof value=='boolean')value='<span class="bool">'+value+'</span>';
                draw.push('<dl><dt>'+tab+(formObj?('<span class="key">"'+name+'"</span>:'):'')+value+(isLast?'':',')+line+'</dt></dl>');   
        };   
    };   
    var isLast=true,indent=0;   
    notify('',data,isLast,indent,false);   
    return {success:true,content:draw.join('')};   
} 

function hide(el){
    var $dl = $(el).parent('span').parent('dt').parent('dl');
    var data_type = $dl.data('type');
    var inner = $dl.html();
    if($dl.data('inner')){
        $dl.data('inner',inner);
    }
    else{
        $dl.attr('data-inner',inner);
    }
    $dl.find('dd').remove();
    $dl.find('span.right-brace').remove();
    $dl.find('.action').html('<a href="javascript:;" onclick="show(this)" class="fold glyphicon glyphicon-plus"></a>'+data_type+'</dt>');
}

function show(el){
    var $dl = $(el).parent('span').parent('dt').parent('dl');
    var inner = $dl.data('inner');
    $dl.html(inner);
}